package com.leiqichao.backend.enums;

/**
 * 文章状态枚举类
 * 用于定义文章的不同状态（如草稿、已发布、已归档等）。
 * 每个状态包含一个代码（用于存储和传输）和一个描述（用于显示）。
 */
public enum ArticleStatus {
    /**
     * 草稿状态
     * - 代码: "draft"
     * - 描述: "草稿"
     */
    DRAFT("draft", "草稿"),

    /**
     * 已发布状态
     * - 代码: "published"
     * - 描述: "已发布"
     */
    PUBLISHED("published", "已发布"),

    /**
     * 已归档状态
     * - 代码: "archived"
     * - 描述: "已归档"
     */
    ARCHIVED("archived", "已归档");

    // 状态代码（用于存储和传输）
    private final String code;

    // 状态描述（用于显示）
    private final String description;

    /**
     * 枚举构造函数
     *
     * @param code        状态代码
     * @param description 状态描述
     */
    ArticleStatus(String code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 获取状态代码
     *
     * @return 状态代码
     */
    public String getCode() {
        return code;
    }

    /**
     * 获取状态描述
     *
     * @return 状态描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 根据状态代码获取对应的枚举值
     *
     * @param code 状态代码
     * @return 对应的枚举值，如果未找到则返回 null
     */
    public static ArticleStatus fromCode(String code) {
        // 遍历所有枚举值
        for (ArticleStatus status : ArticleStatus.values()) {
            // 如果枚举值的代码与传入的代码匹配，则返回该枚举值
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        // 如果未找到匹配的枚举值，则返回 null
        return null;
    }

    /**
     * 根据状态描述获取对应的枚举值
     *
     * @param description 状态描述
     * @return 对应的枚举值，如果未找到则返回 null
     */
    public static ArticleStatus fromDescription(String description) {
        // 遍历所有枚举值
        for (ArticleStatus status : ArticleStatus.values()) {
            // 如果枚举值的描述与传入的描述匹配，则返回该枚举值
            if (status.getDescription().equals(description)) {
                return status;
            }
        }
        // 如果未找到匹配的枚举值，则返回 null
        return null;
    }
}